o.GetType() vs typeof()
typeof
- Выполняется на этапе компиляции и может применяться только к типам, название которых можно понять на этапе компиляции.
- Не поддерживает полиморфизм, то есть в случае вызова от базового класса, вернет тот самый базовый класс.
GetType()
- Выполняется на этапе исполнения.
- Можно узнать тип переменной, которая не будет известна на этапе компиляции.
- Поддерживает полиморфизм, то есть вернет тот тип, которым был создан объект, даже если он приведен к базовому.